home *** CD-ROM | disk | FTP | other *** search
- unit Disques;
-
- interface
-
- uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- FileCtrl,LZExpand,ShellAPI;
-
- // Constants
- const
- (* drive type *)
- _drive_not_exist = 255;
- _drive_floppy = 1;
- _drive_hard = 2;
- _drive_network = 3;
- _drive_CDRom = 4;
- _drive_RAM = 5;
- (* directory option *)
- _directory_recurrent = 1;
- _directory_not_recurrent = 0;
- _directory_force = 1;
- _directory_not_force = 0;
- _directory_clear_file = 1;
- _directory_not_clear_file = 0;
- (* file error *)
- _File_Unable_To_Delete = 10;
- _File_Copied_Ok = 0;
- _File_Already_Exists = 1;
- _File_Bad_Source = 2;
- _File_Bad_Destination = 3;
- _File_Bad_Source_Read = 4;
- _File_Bad_Destination_Read = 5;
- (* copy switch *)
- _File_copy_Overwrite = 1;
-
- // Drives
- function _Drive_Type (_Drive : char) : byte;
- function _Drive_As_Disk (_Drive: Char): Boolean;
- function _Drive_Size (_Drive : char) : longint;
- function _Drive_Free (_Drive : char) : longint;
-
- // Directories
- function _Directory_Exist (_Dir : string) : boolean;
- function _Directory_Create (_Dir : string) : boolean;
- function _Directory_Delete (_Dir : string;ClearFile : byte) : boolean;
- function _Directory_Delete_Tree (_Dir : string; ClearFile : byte) : boolean;
- function _Directory_Rename (_Dir,_NewDir : string) : boolean;
-
- // Files
- function _File_Exist (_File : string) : boolean;
- function _File_Delete (_File : string) : boolean;
- function _File_Recycle (_File : string) : boolean;
- function _File_Rename (_File,_NewFile : string;_Delete : byte) : boolean;
- function _File_Copy_UnCompress (FromFile,ToFile : string;Switch : byte) : byte;
- function _File_Copy(source,dest: String): Boolean;
- function _File_Move (_Source,_Destination : string) : boolean;
- function _File_Get_Attrib (_File : string) : byte;
- function _File_Set_Attrib (_File : string;_Attrib : byte) : boolean;
- function _File_Get_Date (_File : string) : string;
- function _File_Set_Date (_File,_Date : string) : boolean;
- function _File_Get_Size (_File : string) : longint;
- function _File_Start (AppName,AppParams,AppDir : string) : integer;
-
- // Miscellaneous
- function _Get_WindowsDir : string;
- function _Get_SystemDir : string;
- function _Get_TempDir : string;
- function _Get_Apps_Dir (ExeName : PChar) : string;
- function _Get_Apps_Drive (ExeName : PChar) : string;
- function _Get_WindowsVer : real;
- function _Get_WindowsBuild : real;
- function _Get_WindowsPlatform : string;
- function _Get_WindowsExtra : string;
-
- implementation
-
-
- (**********)
- (* drives *)
- (**********)
-
-
- (* type of drive *)
- function _Drive_Type (_Drive : char) : byte;
- var i: integer;
- c : array [0..255] of char;
- begin
- _Drive := upcase (_Drive);
- if not (_Drive in ['A'..'Z']) then
- Result := _drive_not_exist
- else
- begin
- strPCopy (c,_Drive + ':\');
- i := GetDriveType (c);
- case i of
- DRIVE_REMOVABLE: result := _drive_floppy;
- DRIVE_FIXED : result := _drive_hard;
- DRIVE_REMOTE : result := _drive_network;
- DRIVE_CDROM : result := _drive_CDRom;
- DRIVE_RAMDISK : result := _drive_RAM;
- else
- result := _drive_not_exist;
- end;
- end;
- end;
-
- (* test is a disk is in drive *)
- function _Drive_As_Disk (_Drive: Char): Boolean;
- var ErrorMode: Word;
- begin
- _Drive := UpCase(_Drive);
- if not (_Drive in ['A'..'Z']) then
- raise
- EConvertError.Create ('Not a valid drive letter');
- ErrorMode := SetErrorMode (SEM_FailCriticalErrors);
- try
- Application.ProcessMessages;
- Result := (DiskSize ( Ord(_Drive) - Ord ('A') + 1) <> -1);
- finally
- SetErrorMode(ErrorMode);
- Application.ProcessMessages;
- end;
- end;
-
- (* size of drive *)
- function _Drive_Size (_Drive : char) : longint;
- var ErrorMode : word;
- begin
- _Drive := upcase (_Drive);
- if not (_Drive in ['A'..'Z']) then
- raise
- EConvertError.Create ('Not a valid drive letter');
- ErrorMode := SetErrorMode (SEM_FailCriticalErrors);
- try
- Application.ProcessMessages;
- Result := DiskSize ( Ord(_Drive) - Ord ('A') + 1);
- finally
- SetErrorMode (ErrorMode);
- end;
- end;
-
- (* free space in drive *)
- function _Drive_Free (_Drive : char) : longint;
- var ErrorMode : word;
- begin
- _Drive := upcase (_Drive);
- if not (_Drive in ['A'..'Z']) then
- raise
- EConvertError.Create ('Not a valid drive letter');
- ErrorMode := SetErrorMode (SEM_FailCriticalErrors);
- try
- Application.ProcessMessages;
- Result := DiskFree ( Ord(_Drive) - Ord ('A') + 1);
- finally
- SetErrorMode (ErrorMode);
- end;
- end;
-
-
- (***************)
- (* directories *)
- (***************)
-
- (* directory exists or not *)
- function _Directory_Exist (_Dir : string) : boolean;
- VAR OldMode : Word;
- OldDir : String;
- BEGIN
- Result := True;
- GetDir(0, OldDir);
- OldMode := SetErrorMode(SEM_FAILCRITICALERRORS);
- try
- try
- ChDir(_Dir);
- except
- ON EInOutError DO
- Result := False;
- end;
- finally
- ChDir(OldDir);
- SetErrorMode(OldMode);
- end;
- END;
-
- (* create a directory enven if parent does not exists *)
- function _Directory_Create (_Dir : string) : boolean;
- begin
- ForceDirectories(_Dir);
- Result := _Directory_Exist (_Dir);
- end;
-
- (* delete a directory *)
- function _Directory_Delete (_Dir : string;ClearFile : byte) : boolean;
- begin
- if _Directory_Exist (_Dir) then
- Result := RemoveDir (_Dir)
- else
- Result := false;
- end;
-
- (* delete a tree *)
- function _directory_delete_tree (_Dir : string; ClearFile : byte) : boolean;
- var SearchRec : TSearchRec;
- Erc : Word;
- begin
- if _Directory_Exist (_Dir) then
- begin
- Try
- ChDir (_Dir);
- FindFirst('*.*',faAnyFile,SearchRec);
- Erc := 0;
- while Erc = 0 do
- begin
- if ((SearchRec.Name <> '.' ) and
- (SearchRec.Name <> '..')) then
- begin
- if (SearchRec.Attr and faDirectory > 0) then
- _Directory_Delete_Tree (SearchRec.Name,ClearFile)
- else
- if ClearFile = 1 then
- _File_Delete (SearchRec.Name);
- end;
- Erc := FindNext (SearchRec);
- end;
- FindClose (SearchRec);
- Application.ProcessMessages;
- finally
- if Length(_Dir) > 3 then
- ChDir ('..' );
- Result := RemoveDir (_Dir);
- end;
- end
- else
- (* not exists *)
- Result := false;
- end;
-
- (* Renamme a directory *)
- function _Directory_Rename (_Dir,_NewDir : string) : boolean;
- var SearchRec : TSearchRec;
- Erc : Word;
- f : file;
- o : string;
- begin
- if _Directory_Exist (_Dir) then
- begin
- Try
- (* just name of directory *)
- o := _dir;
- Delete (o,1,2); (* remove drive and : *)
- if o [1] = '\' then delete (o,1,1); (* remove \ at begin *)
- if o [length (o)] = '\' then
- o := copy (o,1,length (o)-1); (* delete \ at end *)
- ChDir (_Dir);
- ChDir ('..');
- FindFirst('*.*',faAnyFile,SearchRec);
- Erc := 0;
- while Erc = 0 do
- begin
- if ((SearchRec.Name <> '.' ) and
- (SearchRec.Name <> '..')) then
- begin
- if (SearchRec.Attr and faDirectory > 0) then
- begin
- if SearchRec.Name = o then
- begin
- assignfile (f,SearchRec.Name);
- {$I-};
- rename (F,_NewDir);
- {I+};
- result := (ioresult = 0);
- end;
- end;
- end;
- Erc := FindNext (SearchRec);
- end;
- Application.ProcessMessages;
- finally
- if Length(_Dir) > 3 then
- ChDir ('..' );
- end;
- FindClose (SearchRec);
- end
- else
- (* not exists *)
- Result := false;
- end;
-
-
- (*********)
- (* files *)
- (*********)
-
- (* file exists or not *)
- function _File_Exist (_File : string) : boolean;
- begin
- _File_Exist := FileExists(_File);
- end;
-
- (* delete a file remove -r if needed *)
- function _File_Delete (_File : string) : boolean;
- begin
- if FileExists (_File) then
- begin
- _File_Set_Attrib (_File,0);
- Result := DeleteFile (_File);
- end
- else
- Result := false;
- end;
-
- (* send a file to recycle *)
- function _File_Recycle(_File : TFilename): boolean;
- var Struct: TSHFileOpStruct;
- pFromc: array[0..255] of char;
- Resul : integer;
- begin
- if not FileExists(_File) then
- begin
- _File_Recycle := False;
- exit;
- end
- else
- begin
- fillchar(pfromc,sizeof(pfromc),0);
- StrPcopy(pfromc,expandfilename(_File)+#0#0);
- Struct.wnd := 0;
- Struct.wFunc := FO_DELETE;
- Struct.pFrom := pFromC;
- Struct.pTo := nil;
- Struct.fFlags:= FOF_ALLOWUNDO or FOF_NOCONFIRMATION ;
- Struct.fAnyOperationsAborted := false;
- Struct.hNameMappings := nil;
- Resul := ShFileOperation(Struct);
- _File_Recycle := (Resul = 0);
- end;
- end;
-
- (* renamme a file, delete if needed *)
- function _File_Rename (_File,_NewFile : string;_Delete : byte) : boolean;
- var f : file;
- begin
- if FileExists (_File) then
- begin
- if FileExists (_NewFile) then
- begin
- if _Delete = 0 then
- Result := false
- else
- _File_Delete (_NewFile);
- end;
- assignfile (f,_File);
- {$I-};
- Rename (f,_NewFile);
- {$I+};
- Result := (ioresult = 0);
- end
- else
- Result := false;
- end;
-
- (* copy a file *)
- function _File_Copy_UnCompress (FromFile,ToFile : string;Switch : byte) : byte;
- var Tmp : integer;
- FromF, ToF: file;
- NumRead, NumWritten: Word;
- iHandle : Integer;
- iNewHandle : Integer;
- iReturn : Integer;
- iLongReturn : LongInt;
- pFrom : Array[0..256] of Char;
- pTo : Array[0..256] of Char;
- begin
- Tmp := 0;
- If (FileExists (ToFile)) and (Switch = 0) then
- Tmp := 1
- else
- begin
- StrPCopy( pFrom, FromFile );
- iReturn := GetExpandedName( pFrom, pTo );
- if iReturn = -1 then
- Tmp := 2
- else
- begin
- if iReturn = -2 then
- Tmp := 3
- else
- begin
- if ( StrEnd( pTo ) - pTo ) > 0 then
- begin
- ToFile := ExtractFilePath( ToFile ) +
- ExtractFileName( strPas( pTo ) );
- iHandle := FileOpen( FromFile, fmShareDenyWrite );
- LZInit (iHandle);
- if iHandle < 1 then
- Tmp := 2
- else
- begin
- iNewHandle := FileCreate( ToFile );
- if iNewHandle < 1 then
- Tmp := 3
- else
- begin
- iLongReturn := LZCopy( iHandle , iNewHandle );
- if iLongReturn = LZERROR_UNKNOWNALG then
- Tmp := 5
- else
- begin
- FileClose( iHandle );
- FileClose( iNewHandle );
- LZClose (iHandle);
- end;
- end;
- end;
- end
- else
- Tmp := 3;
- end
- end;
- end;
- _File_Copy_UnCompress := Tmp;
- end;
-
- (* just copy a file *)
- function _File_Copy(source,dest: String): Boolean;
- var
- fSrc,fDst,len: Integer;
- size: Longint;
- buffer: packed array [0..2047] of Byte;
- begin
- if pos ('\\',source) <> 0 then delete (source,pos ('\\',source),1);
- if pos ('\\',dest) <> 0 then delete (dest,pos ('\\',dest),1);
- Result := False;
- if source <> dest then
- begin
- fSrc := FileOpen(source,fmOpenRead);
- if fSrc >= 0 then
- begin
- size := FileSeek(fSrc,0,2);
- FileSeek(fSrc,0,0);
- fDst := FileCreate(dest);
- if fDst >= 0 then begin
- while size > 0 do
- begin
- len := FileRead(fSrc,buffer,sizeof(buffer));
- FileWrite(fDst,buffer,len);
- size := size - len;
- end;
- FileSetDate(fDst,FileGetDate(fSrc));
- FileClose(fDst);
- FileSetAttr(dest,FileGetAttr(source));
- Result := True;
- end;
- FileClose(fSrc);
- end;
- end;
- end;
-
- (* move a file *)
- function _File_Move (_Source,_Destination : string) : boolean;
- var Tmp : boolean;
- begin
- tmp := _File_Copy (_Source,_Destination);
- if Tmp = true then
- if _File_Delete (_Source) = true then
- Tmp := true
- else
- Tmp := false;
- Result := Tmp;
- end;
-
- (* Get file attributes *)
- function _File_Get_Attrib (_File : string) : byte;
- var Tmp : byte;
- Att : integer;
- begin
- if FileExists (_File) then
- begin
- Att := FileGetAttr (_File);
- if Att <> -1 then
- begin
- Tmp := 0;
- if (Att AND faReadOnly) = faReadOnly then Tmp := Tmp + 1;
- if (Att AND faHidden) = faHidden then Tmp := Tmp + 2;
- if (Att AND faSysFile) = faSysFile then Tmp := Tmp + 4;
- if (Att AND faArchive) = faArchive then Tmp := Tmp + 8;
- Result := Tmp;
- end
- else
- Result := 255;
- end
- else
- Result := 255;
- end;
-
- (* Set file attributes *)
- function _File_Set_Attrib (_File : string;_Attrib : byte) : boolean;
- var Tmp : integer;
- begin
- if FileExists (_File) then
- begin
- Tmp := 0;
- if _Attrib and 1 = 1 then Tmp := tmp OR faReadOnly;
- if _Attrib and 2 = 2 then Tmp := tmp OR faHidden;
- if _Attrib and 4 = 4 then Tmp := tmp OR faSysFile;
- if _Attrib and 8 = 8 then Tmp := tmp OR faArchive;
- Result := FileSetAttr (_File,Tmp) = 0;
- end
- else
- Result := false
- end;
-
- (* Get datestamp of file *)
- function _File_Get_Date (_File : string) : string;
- var f : file;
- Hdl : integer;
- Tmp : string;
- Dte : integer;
- Dat : TDateTime;
- begin
- Tmp := '';
- Hdl := FileOpen(_File, fmOpenRead or fmShareDenyNone);
- if Hdl > 0 then
- begin
- Dte := FileGetDate (Hdl);
- FileClose (Hdl);
- Dat := FileDateToDateTime (Dte);
- Tmp := DateToStr (Dat);
- while pos ('/',Tmp) <> 0 do delete (Tmp,pos ('/',Tmp),1);
- if length (tmp) > 6 then delete (Tmp,5,2);
- end;
- Result := Tmp;
- end;
-
- (* Set datestamp of file *)
- function _File_Set_Date (_File,_Date : string) : boolean;
- var f : file;
- Hdl : integer;
- Dte : integer;
- Dat : TDateTime;
- Att : integer;
- begin
- Att := _File_Get_Attrib (_File);
- if (Att AND 1) <> 1 then Att := 0
- else _File_Set_Attrib (_File,0);
- Hdl := FileOpen(_File, fmOpenReadWrite or fmShareDenyNone);
- if Hdl > 0 then
- begin
- if length (_Date) < 8 then Insert ('19',_Date,5);
- if pos ('/',_Date) = 0 then
- _Date := copy (_Date,1,2) + '/' +
- copy (_Date,3,2) + '/' +
- copy (_Date,5,4);
- Dat := StrToDateTime (_Date);
- Dte := DateTimeToFileDate (Dat);
- Result := FileSetDate (Hdl,Dte) = 0;
- FileClose (Hdl);
- if Att <> 0 then
- _File_Set_Attrib (_File,Att);
- end
- else
- begin
- if Att <> 0 then
- _File_Set_Attrib (_File,Att);
- Result := False;
- end;
- end;
-
- (* return size of a file *)
- function _File_Get_Size (_File : string) : longint;
- var f: file of Byte;
- a : integer;
- begin
- if FileExists (_File) then
- begin
- a := _File_Get_Attrib (_File);
- if (a AND 1) = 1 then
- _File_Set_Attrib (_File,0)
- else
- a := 0;
- AssignFile(f,_File);
- {$I-};
- Reset(f);
- {$I+};
- if ioresult = 0 then
- begin
- Result := FileSize(f);
- CloseFile(f);
- if a <> 0 then
- _File_Set_Attrib (_File,a);
- end
- else
- begin
- if a <> 0 then
- _File_Set_Attrib (_File,a);
- Result := -1;
- end;
- end
- else
- Result := -1;
- end;
-
- (* lancement d'une application *)
- function _File_Start (AppName,AppParams,AppDir : string) : integer;
- var Tmp : Integer;
- zFileName : array [0 .. 79] of char;
- zParams : array [0 .. 79] of char;
- zDir : array [0 .. 79] of Char;
- begin
- Tmp := 0;
- StrPCopy (zFileName,AppName);
- StrPCopy (zParams,AppParams);
- StrPCopy (zDir,AppDir);
- Tmp := ShellExecute (0,Nil,zFileName,zParams,zDir,1);
- _File_Start := Tmp;
- end;
-
-
-
- (*****************)
- (* miscellaneous *)
- (*****************)
-
- (* return Windows directory *)
- function _Get_WindowsDir : string;
- var Tmp : array [0 .. 255] of char;
- Ret : string;
- begin
- if GetWindowsDirectory (Tmp,255) <> 0 then
- begin
- Ret := StrPas (Tmp);
- if Ret [length (Ret)] = '\' then
- Ret := copy (Ret,1,length (Ret) - 1);
- Result := Ret;
- end
- else
- Result := '';
- end;
-
- (* return Windows system directory *)
- function _Get_SystemDir : string;
- var Tmp : array [0 .. 255] of char;
- Ret : string;
- begin
- if GetSystemDirectory (Tmp,255) <> 0 then
- begin
- Ret := StrPas (Tmp);
- if Ret [length (Ret)] = '\' then
- Ret := copy (Ret,1,length (Ret) - 1);
- Result := Ret;
- end
- else
- Result := '';
- end;
-
- (* return Windows Temp directory *)
- function _Get_TempDir : string;
- var Tmp : array [0 .. 255] of char;
- Ret : string;
- begin
- if GetTempPath (255,Tmp) <> 0 then
- begin
- Ret := StrPas (Tmp);
- if Ret [length (Ret)] = '\' then
- Ret := copy (Ret,1,length (Ret) - 1);
- Result := Ret;
- end
- else
- Result := '';
- end;
-
- (* return application directory *)
- function _Get_Apps_Dir (ExeName : PChar) : string;
- var Hdl : THandle;
- Nam : PChar;
- Fil : array [0..255] of char;
- Siz : integer;
- Ret : integer;
- Pas : string;
- Pat : string [79];
- begin
- Pat := '';
- Hdl := GetModuleHandle (ExeName);
- Ret := GetModuleFileName (Hdl,Fil,Siz);
- Pas := StrPas (Fil);
- Pat := ExtractFilePath (Pas);
- Delete (Pat,1,2);
- if Pat [length (Pat)] = '\' then
- Pat := copy (Pat,1,length (Pat) - 1);
- Result := Pat;
- end;
-
- (* return dirve of current application *)
- function _Get_Apps_Drive (ExeName : PChar) : string;
- var Hdl : THandle;
- Nam : PChar;
- Fil : array [0..255] of char;
- Siz : integer;
- Ret : integer;
- Pas : string;
- Drv : string [02];
- begin
- Drv := '';
- Hdl := GetModuleHandle (ExeName);
- Ret := GetModuleFileName (Hdl,Fil,Siz);
- Pas := StrPas (Fil);
- Drv := ExtractFilePath (Pas);
- _Get_Apps_Drive := Drv;
- end;
-
- (* return windows version as a real *)
- function _Get_WindowsVer : real;
- var tempo : string;
- Temp : real;
- err : integer;
- struct : TOSVersionInfo;
- begin
- struct.dwOSVersionInfoSize := sizeof (Struct);
- struct.dwMajorVersion := 0;
- struct.dwMinorVersion := 0;
- GetVersionEx (Struct);
- Tempo := inttostr (Struct.dwMajorVersion) + '.' + inttostr (Struct.dwMinorVersion);
- val (tempo,temp,err);
- Result := Temp;
- end;
-
- (* return type of platform *)
- function _Get_WindowsPlatform : string;
- var tempo : string;
- Temp : string;
- err : integer;
- struct : TOSVersionInfo;
- begin
- struct.dwOSVersionInfoSize := sizeof (Struct);
- struct.dwPlatformId := 0;
- GetVersionEx (Struct);
- case struct.dwPlatformid of
- ver_platform_win32s : temp := 'Win32S';
- ver_platform_win32_windows : temp := 'Win32';
- ver_platform_win32_nt : temp := 'WinNT';
- end;
- Result := Temp;
- end;
-
- (* get extra information *)
- function _Get_WindowsExtra : string;
- var tempo : string;
- Temp : string;
- err : integer;
- struct : TOSVersionInfo;
- begin
- struct.dwOSVersionInfoSize := sizeof (Struct);
- struct.dwMajorVersion := 0;
- struct.dwMinorVersion := 0;
- struct.dwBuildNumber := 0;
- struct.dwPlatformId := 0;
- GetVersionEx (Struct);
- Temp := '';
- Temp := strPas (Struct.szCSDVersion);
- Result := Temp;
- end;
-
- (* return windows build as a real *)
- function _Get_WindowsBuild : real;
- var tempo : string;
- Temp : real;
- err : integer;
- struct : TOSVersionInfo;
- begin
- struct.dwOSVersionInfoSize := sizeof (Struct);
- struct.dwBuildNumber := 0;
- GetVersionEx (Struct);
- tempo := inttostr (struct.dwBuildNumber AND $0000FFFF);
- val (tempo,temp,err);
- Result := Temp;
- end;
-
- begin
- end.
-